package org.example.c05集合;

import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int capacity;

    public LRUCache(int capacity) {
        // 初始容量、负载因子、accessOrder 设为 true
        super(capacity, 0.75f, true);
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > capacity; // 超过容量时移除最老元素
    }

    public static void main(String[] args) {
        LRUCache<String, String> cache = new LRUCache<>(3);
        cache.put("A", "Value A");
        cache.put("B", "Value B");
        cache.put("C", "Value C"); // 插入元素是插入到链尾, 所以下面
        System.out.println(cache); // 输出: {A=Value A, B=Value B, C=Value C}

        cache.get("A"); // 访问 A，将 A 移至尾部(因为最新查找/插入的元素都是最新的, 统一保持在队尾)
        System.out.println(cache); // 输出: {B=Value B, C=Value C, A=Value A}

        cache.put("D", "Value D"); // 超出容量，移除最老(最前面)的 B
        System.out.println(cache); // 输出: {C=Value C, A=Value A, D=Value D}
    }
}